perm filename M873YD.PAL[KL,SYS]2 blob sn#212449 filedate 1976-04-27 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	
C00011 00003	.TITLE BOOTSTRAP LOADER M873-YD
C00022 ENDMK
C⊗;
comment ⊗
*173000/   33727   
173002/   -210   =177570   
173004/   1   
173006/   1010   
173010/   13707   
173012/   -210   =177570   
173014/   -66074   =111704   
173016/   5001   
173020/   5005   
173022/   424   
173024/   -5000   =173000   
173026/   340   
173030/   13701   
173032/   -210   =177570   
173034/   -71477   =106301   
173036/   -55077   =122701   
173040/   340   
173042/   -76374   =101404   
173044/   -55077   =122701   
173046/   60   
173050/   -76777   =101001   
173052/   5001   
173054/   301   
173056/   42701   
173060/   -10   =177770   
173062/   13705   
173064/   -210   =177570   
173066/   5004   
173070/   -72073   =105705   
173072/   -77271   =100507   
173074/   12700   
173076/   5   
173100/   12702   
173102/   -400   =177400   
173104/   12703   
173106/   4003   
173110/   301   
173112/   50103   
173114/   50100   
173116/   12701   
173120/   -434   =177344   
173122/   12706   
173124/   24   
173126/   5705   
173130/   -77374   =100404   
173132/   5306   
173134/   -77776   =100002   
173136/   0   
173140/   770   
173142/   5   
173144/   10341   
173146/   5711   
173150/   -77402   =100376   
173152/   5721   
173154/   5761   
173156/   -4   =177774   
173160/   -77416   =100362   
173162/   10211   
173164/   10041   
173166/   -72067   =105711   
173170/   -77402   =100376   
173172/   5721   
173174/   -77024   =100754   
173176/   5741   
173200/   -72767   =105011   
173202/   -55100   =122700   
173204/   5   
173206/   1001   
173210/   137   
173212/   0   
173214/   776   
173216/   10037   
173220/   40   
173222/   402   
173224/   -5000   =173000   
173226/   340   
173230/   10700   
173232/   410   
173234/   12700   
173236/   4015   
173240/   12702   
173242/   -70000   =110000   
173244/   12703   
173246/   3   
173250/   5005   
173252/   721   
173254/   10137   
173256/   42   
173260/   12701   
173262/   44   
173264/   10221   
173266/   10321   
173270/   10421   
173272/   10521   
173274/   10621   
173276/   10021   
173300/   160   
173302/   2   
173304/   -66074   =111704   
173306/   5005   
173310/   5001   
173312/   12700   
173314/   34400   
173316/   12702   
173320/   -400   =177400   
173322/   12703   
173324/   626   
173326/   50100   
173330/   12701   
173332/   -1100   =176700   
173334/   5   
173336/   10006   
173340/   42706   
173342/   -10   =177770   
173344/   10661   
173346/   10   
173350/   32711   =32711   
173352/   4000   
173354/   1767   
173356/   12721   
173360/   21   
173362/   10306   
173364/   42706   
173366/   -2000   =176000   
173370/   10661   
173372/   32   
173374/   10306   
173376/   -77775   =100003   
173400/   12761   
173402/   10000   
173404/   30   
173406/   6206   
173410/   6206   
173412/   -72772   =105006   
173414/   -27772   =150006   
173416/   -71772   
173420/   -71572   =106206   
173422/   -71572   =106206   
173424/   10661   
173426/   4   
173430/   10211   
173432/   10006   
173434/   -72772   =105006   
173436/   306   
173440/   10641   
173442/   -72067   =105711   
173444/   -77402   =100376   
173446/   32711   
173450/   60000   
173452/   1330   
173454/   32761   
173456/   -40000   =140000   
173460/   12   
173462/   1324   
173464/   22706   
173466/   71   
173470/   1250   
173472/   22737   
173474/   240   
173476/   0   
173500/   1643   
173502/   0   
173504/   641   
173506/   10037   
173510/   40   
173512/   10700   
173514/   657   
173516/   12700   
173520/   30500   
173522/   12702   
173524/   -70000   =110000   
173526/   12703   
173530/   32631   
173532/   676   
173534/   10037   
173536/   40   
173540/   10700   
173542/   644   
173544/   5005   
173546/   12501   
173550/   12503   
173552/   12504   
173554/   11500   
173556/   12715   
173560/   340   
173562/   5745   
173564/   12702   
173566/   -3440   =174340   
173570/   10715   
173572/   10506   
173574/   62702   
173576/   40   
173600/   -72076   =105702   
173602/   -77010   =100770   
173604/   32762   
173606/   4000   
173610/   34   
173612/   1770   
173614/   26217   
173616/   14   
173620/   1365   
173622/   5725   
173624/   10015   
173626/   10445   
173630/   10345   
173632/   10145   
173634/   12700   
173636/   130   
173640/   10204   
173642/   12420   
173644/   22700   
173646/   160   
173650/   -76404   =101374   
173652/   10201   
173654/   62701   
173656/   32   
173660/   12721   
173662/   100   
173664/   5012   
173666/   5062   
173670/   20   
173672/   32711   
173674/   4000   
173676/   1775   
173700/   32762   
173702/   26   
173704/   36   
173706/   1403   
173710/   12711   
173712/   400   
173714/   0   
173716/   12762   
173720/   100   
173722/   32   
173724/   5062   
173726/   22   
173730/   12762   
173732/   -70400   
173734/   16   
173736/   32711   
173740/   4000   
173742/   1775   
173744/   -45067   
173746/   202   
173750/   1775   
173752/   -77775   =100003   
173754/   22715   
173756/   240   
173760/   1403   
173762/   12711   
173764/   400   
173766/   0   
173770/   12762   
173772/   100   
173774/   32   
173776/   115   
174000/   200   
⊗
.TITLE BOOTSTRAP LOADER M873-YD

;STARTUP OFFSETS
;SWITCH		ADDRESS
;  1		  000		SWITCH
;  2		  304		RP04
;  3		  014		DECTAPE
;  4		  534		POWER

R0=%0
R1=%1
R2=%2
R3=%3
R4=%4
R5=%5
SP=%6
PC=%7

;TC11 REGISTERS
TCST=177340
TCCM=177342
TCWC=177344
TCBA=177346

;RP04 REGISTERS
RPCS1=176700
RPWC=176702
RPBA=176704
RPDA=176706
RPCS2=176710
RPDS=176712
RPER1=176714
RPAS=176716
RPLA=176720
RPDB=176722
RPMR=176724
RPDT=176726
RPSN=176730
RPOF=176732
RPDC=176734
RPCC=176736
RPER2=176740
RPER3=176742
RPEC1=176744
RPEC2=176746

SWREG=177570
.=173000

SW1GO:	BIT @#SWREG,#1
	BNE SW1ODD		;BRANCH IF BIT 15 ON IN SWITCH REGISTER
	MOV @#SWREG,PC		;JUMP TO ADDRESS IN SWITCH REGISTER

.=173014
SW3GO:	MOVB (PC),R4
	CLR R1			;ASSUME DRIVE ZERO
	CLR R5			;SIMULATE ZERO SWITCHES
	BR SW1OD2

.=173024
	173000
	340

.=173030
SW1ODD:	MOV @#SWREG,R1
	ASLB R1
	CMPB #340,R1
	BLOS SW1OD1
	CMPB #60,R1
	BHI SW1OD1
	CLR R1			;ASSUME DRIVE ZERO
SW1OD1:	SWAB R1			;GET DRIVE NUMBER INTO LOW BYTE
	BIC #177770,R1		;KEEP LOW 3 BITS (DECTAPE DRIVE NUMBER)
	MOV @#SWREG,R5
	CLR R4
	TSTB R5
	BMI 173312		;BRANCH IF SWREG BIT 7 IS ON
SW1OD2:	MOV #5,R0		;COMMAND FOR TCCM:DRIVE=0,RDATA,FORWARD,DO
	MOV #-400,R2		;SET UP WORD COUNT REGISTER
	MOV #4003,R3		;COMMAND FOR TCCM:DRIVE=0,RNUM,REVERSE,DO
	SWAB R1			;PUT DRIVE NUMBER IN HIGH BYTE
	BIS R1,R3		;OR DRIVE NUMBER INTO REVERSE COMMAND
	BIS R1,R0		;OR DRIVE NUMBER INTO READ FORWARD COMMAND
SW1OD5:	MOV #TCCM+2,R1		;AFTER AUTO DECREMENT WILL POINT AT TCCM
SW1OD3:	MOV #24,SP		;USE SP AS A COUNTER
SW1OD4:	TST R5
	BMI SPIN		;BRANCH IF SWREG BIT 15 IS ON (TRY INDEFINITELY)
	DEC SP			;BUMP COUNT
	BPL SPIN		;BRANCH IF STILL NON-NEGATIVE
	HALT
	BR SW1OD3

;START RUNNING THE TC11 DECTAPE DRIVE
SPIN:	RESET			;CAUSES TCBA TO BE SET TO ZERO
	MOV R3,-(R1)		;START SPINNING BACKWARDS READING BLOCK NUMS
SPINL1:	TST (R1)		;WAIT FOR AN ERROR (SHOULD RUN INTO THE
	BPL SPINL1		; FRONT END ZONE EVENTUALLY)
	TST (R1)+		;POINT AT TCWC
	TST -4(R1)		;LOOK AT END ZONE BIT IN TCST
	BPL SW1OD4		;IF IT IS OFF TRY AGAIN (GOT SOME OTHER ERROR)
	MOV R2,(R1)   		;STORE WORD COUNT IN TCWC
	MOV R0,-(R1)   		;READ FORWARD CMD, LEAVE R1 POINTING AT TCCM
SPINL2:	TSTB (R1)		;WAIT FOR READY
	BPL SPINL2
	TST (R1)+		;TEST ERROR BIT, POINT R1 AT TCWC
	BMI SW1OD4		;BRANCH ON ERROR
	TST -(R1)		;BUMP BACK TO TCCM
	CLRB (R1)		;CLEAR FUNCTION, DO, INT ENB
	CMPB #5,R0		;SEE IF LAST COMMAND WAS FORWARD READ
	BNE HLTLUP		;IF NOT THEN HALT
GOTHER:	JMP @(PC)+		;GO TO 0 ABSOLUTE (WHERE WE JUST READ 400 WDS INTO)
HLTLUP:	0
	BR HLTLUP		;STAY HALTED IF PRESS CONTINUE

	MOV R0,@#40   			;173216
	BR 173230   			;173222

.=173224
	173000
	340

.=173230
UTIL:	MOV PC,R0
	BR UTIL1			;SIMULATE JSP R0,UTIL1
	MOV #4015,R0
	MOV #110000,R2
	MOV #3,R3
	CLR R5
	BR SW1OD5

UTIL1:	MOV R1,@#42			;SAVE R1 IN 42
	MOV #44,R1
	MOV R2,(R1)+			;SAVE R2 IN 44
	MOV R3,(R1)+			;SAVE R3 IN 46
	MOV R4,(R1)+			;SAVE R4 IN 50
	MOV R5,(R1)+			;SAVE R5 IN 52
	MOV SP,(R1)+			;SAVE SP IN 54
	MOV R0,(R1)+			;SAVE R0 IN 56
	JMP 2(R0)			;RETURN FROM SIMULATED JSP R0,UTIL1


;R3 AND R0 SPECIFY THE DISK ADDRESS.
;R3 BITS
; 15	ON MEANS 16 BIT / WORD FORMAT
; 0-8	CYLINDER
;10-14	TRACK

;R0 BITS
; 3-7	SECTOR ADDRESS
; 8-15	COMMAND (STORED IN LOW BYTE OF RPCS1)

.=173304
SW2GO:	MOVB (PC),R4
	CLR R5
	CLR R1
	MOV #34400,R0			;71,,SECTOR 0 (71 = READ DATA COMMAND)
	MOV #-400,R2			;WORD COUNT
	MOV #626,R3			;CYLINDER 404 DECIMAL,TRACK 0,18 BIT FORMAT
	BIS R1,R0
SW2GO1:	MOV #RPCS1,R1
SW2GO2:	RESET
	MOV R0,SP
	BIC #177770,SP
	MOV SP,10(R1)			;SET DRIVE NUMBER IN RPCS2
	BIT #4000,(R1)			;WAIT UNTIL DRIVE AVAILABLE
	BEQ SW2GO2			;  ON THIS CONTROLLER
	MOV #21,(R1)+			;GIVE "READ-IN-PRESET" COMMAND
	MOV R3,SP
	BIC #176000,SP
	MOV SP,32(R1)			;SETUP DESIRED CYLINDER ADDRESS
	MOV R3,SP
	BPL SW2GO3			;BRANCH IF R3 BIT 15 IS OFF
	MOV #10000,30(R1)		;SET 16 BIT / WORD FORMAT
SW2GO3:	ASR SP
	ASR SP
	CLRB SP				;ALSO CLEARS C BIT
	BISB R0,SP
	RORB SP				;FLUSH LOW BIT AND ZERO HIGH BIT
	ASRB SP
	ASRB SP				;GET SECT ADDR TO BITS 0-4
	MOV SP,4(R1)			;SET TRACK AND SECTOR ADDRESSES
	MOV R2,(R1)			;SET WORD COUNT
	MOV R0,SP
	CLRB SP
	SWAB SP
	MOV SP,-(R1)			;GIVE COMMAND FROM LH OF R0
SW2GO4:	TSTB (R1)
	BPL SW2GO4			;WAIT FOR READY
	BIT #60000,(R1)
	BNE SW2GO2			;TRY AGAIN IF ERRORS
	BIT #140000,12(R1)
	BNE SW2GO2			;TRY AGAIN IF ATTENTION OR ERRORS
	CMP #71,SP			;DID WE JUST GIVE A READ COMMAND?
	BNE HLTLUP			;NO, LOSE
	CMP #240,@#0			;IS FIRST WORD READ A NOP?
	BEQ GOTHER			;YES, GO DO IT
	HALT				;NO, LOSE.  IF YOU CONTINUE....
	BR GOTHER			;....THEN START UP AT ZERO

.=173506
UTIL2:	MOV R0,@#40
	MOV PC,R0			;SIMULATE JSP R0,UTIL1
	BR UTIL1
	MOV #30500,R0
	MOV #110000,R2
	MOV #32631,R3
	BR SW2GO1




.=173534
SW4GO:	MOV R0,@#40
	MOV PC,R0
	BR UTIL1		;SIMULATE JSP R0,UTIL1
	CLR R5
	MOV (R5)+,R1		;C(0) → R1
	MOV (R5)+,R3		;C(2) → R3
	MOV (R5)+,R4		;C(4) → R4
	MOV (R5),R0		;C(6) → R0, R5 = 6
	MOV #340,(R5)		;340 → C(6) (SET UP ERROR PS)
	TST -(R5)		;R5 = 4
SW4GO1:	MOV #174340,R2
	MOV PC,(R5)		;STORE ADDR OF NEXT INSTR AS ERROR PC ( → C(4))
	MOV R5,SP		;4 → SP
SW4GO2:	ADD #40,R2
	TSTB R2
	BMI SW4GO1
	BIT #4000,34(R2)	;LOOK AT 10 REQ INT (1) IN DTE STATUS REGISTER
	BEQ SW4GO2
	CMP 14(R2),(PC)
	BNE SW4GO2
	TST (R5)+		;6 → R5
	MOV R0,(R5)		;R0 → C(6)
	MOV R4,-(R5)		;R4 → C(4)
	MOV R3,-(R5)		;R3 → C(2)
	MOV R1,-(R5)		;R1 → C(0)
	MOV #130,R0
	MOV R2,R4
SW4GO3:	MOV (R4)+,(R0)+		;COPY DTE REGISTERS TO 130
	CMP #160,R0
	BHI SW4GO3
	MOV R2,R1
	ADD #32,R1		;POINTS AT DIAG2
	MOV #100,(R1)+		;RESET THAT DTE
	CLR (R2)		;CLEAR DELAY COUNT
	CLR 20(R2)		;CLEAR TO 10 ADDRESS
SW4GO4:	BIT #4000,(R1)		;LOOK AT 10 REQ INT (1) IN STATUS
	BEQ SW4GO4		;WAIT UNTIL IT IS ON
	BIT #26,36(R2)		;LOOK AT UNIBUS PARITY ERROR BITS IN DIAG3
	BEQ SW4GO5
	MOV #400,(R1)		;SET REQ 10 INT
	HALT

SW4GO5:	MOV #100,32(R2)		;RESET DTE AGAIN
	CLR 22(R2)		;CLEAR TO 11 ADDRESS
	MOV #107400,16(R2)	;START TRANSFER OF 400 WORDS, I BIT ON
SW4GO6:	BIT #4000,(R1)		;WAIT FOR 10 REQ INT (1)
	BEQ SW4GO6
SW4GO7:	BITB #202,(R1)		;LOOK AT TO11 ERR AND NORM TERM
	BEQ SW4GO7		;WAIT FOR ONE TO COME ON
	BPL SW4GO8		;BRANCH IF NORM TERM CLEAR
	CMP #NOP,(R5)		;MAKE SURE FIRST WORD TRANSFERRED WAS A NOP
	BEQ SW4GO9
SW4GO8:	MOV #400,(R1)
	HALT
SW4GO9:	MOV #100,32(R2)		;RESET AGAIN JUST TO MAKE SURE
	JMP (R5)		;TRANSFER TO 0